﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace _002_双指针
{
    class Program
    {
        static void Main(string[] args)
        {
            int[] nums = { 0, 1, 0, 3, 12 };

            Program p = new Program();
            p.moveZeroes(nums);
            Console.ReadKey();
            Array.Copy()

        }
        public void moveZeroes(int[] nums)
        {
            //定义一个数组的长度，和快慢双指针
            int n = nums.Length, left = 0,right = 0;
            //判断循环的停止条件
            while (right < n)
            {

                //判断这个元素登不等于0，不等于，则把数组元素调换，始终保持非零数在左边
                //刚开始左右都是零，判断不是非零数调不调都无所谓。
                //如果都是非零数的话，左右指针同时递进，也是属于自己和自己调换一次而已。
                if (nums[right] != 0)
                {
                    //调换函数
                    swap(nums, left, right);
                    //left++
                    left++;
                }
                //当如果碰到了一次零，左右指针便不会同时递进，而是右指针递进了一次
                //用来判断下一位nums[right]是不是非零，如果是的话则和现在的nums[left]互换。
                //如果再下一位也是零的话，nums[left]始终是第一个零的位置。需找到下一个非零数nums[hight]才会调换
                //始终保持非零数的相对位置在左边，如此循环便把所有的零放在了右边
                right++;
            }
        }

        public void swap(int[] nums,int left,int right)
        {
            int temp = nums[left];
            nums[left] = nums[right];
            nums[right] = temp;
        }

        public int[] TwoSum(int[] numbers, int target)
        {
            int[] daan = new int[2];
            int left = 0, righ = numbers.Length - 1;
            
            while (left < righ)
            {
                if (numbers[left] + numbers[righ] < target)
                {
                    left++;
                }
                else if (numbers[left] + numbers[righ] > target)
                {
                    righ--;
                }
                else
                {
                    daan[0] = left + 1;
                    daan[1] = righ + 1;
                    return daan;
                }
            }
            return daan;
        }

    }
}
